原创使用InvokeRepeating差值器平滑抬高摄像头Camera角度
简书链接:原创使用InvokeRepeating差值器平滑抬高摄像头Camera角度
文章字数:508,阅读全文大约需要2分钟
判断角度差使用Quaternion.Angle(targetRotation, Camera.main.transform.rotation)
如果直接用 Camera.main.transform.rotation.x
判断你会发现, 递减到0之后又到了360,显然是不行的。它永远是0到360的循环
Camera.main.transform.eulerAngles = Vector3.Lerp(Camera.main.transform.eulerAngles,new Vector3(-40, Camera.main.transform.eulerAngles.y, Camera.main.transform.eulerAngles.z), Time.deltaTime);
1 | ,不过 ```Lerp```和```Slerp```是有点不一样的。一个是球性差值器,一个是线性差值器 |
void CameraUp()
{
Quaternion targetRotation = Quaternion.Euler(-30, Camera.main.transform.rotation.y, Camera.main.transform.rotation.z);// * Quaternion.identity;
string str=(Quaternion.Angle(targetRotation, Camera.main.transform.rotation))+"差";
print("angle x:" + Camera.main.transform.eulerAngles.x+",差多少:"+str);
Camera.main.transform.rotation = Quaternion.Slerp(Camera.main.transform.rotation, targetRotation, Time.deltaTime * 2);//利用Slerp插值让物体进行旋转 2是旋转速度 越大旋转越快
//Camera.main.transform.eulerAngles = Vector3.Lerp(Camera.main.transform.eulerAngles,new Vector3(-40, Camera.main.transform.eulerAngles.y, Camera.main.transform.eulerAngles.z), Time.deltaTime);
if (Quaternion.Angle(targetRotation, Camera.main.transform.rotation) <1)
{
CancelInvoke("CameraUp");
print("cancel");
return;
}
else
{
}
}
1 |
|
if (Quaternion.Angle(targetRotation, Quaternion.Euler(Camera.main.transform.localEulerAngles.x, Camera.main.transform.localEulerAngles.y, Camera.main.transform.localEulerAngles.z)) < 1)
1 | 和之前代码区别就是 这里 传递的是```Quaternion.Euler(```而不是直接的```rotation``` |
Quaternion targetRotation = Quaternion.Euler(-30, Camera.main.transform.localEulerAngles.y, Camera.main.transform.localEulerAngles.z);// * Quaternion.identity;
string str = (Quaternion.Angle(targetRotation, Camera.main.transform.localRotation)) + "差";
print("angle x:" + Camera.main.transform.localEulerAngles.x + ",差多少:" + str);
Camera.main.transform.localEulerAngles = Vector3.Lerp(Camera.main.transform.localEulerAngles, new Vector3(-30, Camera.main.transform.localEulerAngles.y, Camera.main.transform.localEulerAngles.z), Time.deltaTime);
if (Quaternion.Angle(targetRotation, Quaternion.Euler(Camera.main.transform.localEulerAngles.x, Camera.main.transform.localEulerAngles.y, Camera.main.transform.localEulerAngles.z)) < 1)
{
CancelInvoke("CameraUp");
print("cancel");
return;
}
else
{
}
1 |
|
Quaternion targetRotation = Quaternion.Euler(-30, Camera.main.transform.localEulerAngles.y, Camera.main.transform.localEulerAngles.z);// * Quaternion.identity;
string str = (Quaternion.Angle(targetRotation, Camera.main.transform.localRotation)) + "差";
print("angle x:" + Camera.main.transform.localEulerAngles.x + ",差多少:" + str);
Camera.main.transform.localRotation = Quaternion.Slerp(Camera.main.transform.localRotation, targetRotation, Time.deltaTime * 2);//利用Slerp插值让物体进行旋转 2是旋转速度 越大旋转越快
if (Quaternion.Angle(targetRotation, Camera.main.transform.localRotation) < 1)
{
CancelInvoke("CameraUp");
print("cancel");
return;
}
else
{
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 情迁博客!
评论